home *** CD-ROM | disk | FTP | other *** search
/ TOS Silver 2000 / TOS Silver 2000.iso / programm / MM2_DEV / S / MOS / SIMPLEER.I < prev    next >
Encoding:
Modula Implementation  |  1990-11-25  |  21.5 KB  |  469 lines

  1. IMPLEMENTATION MODULE SimpleError;
  2. (*$R-,Y+,S-,M-,B+*)
  3.  
  4. (*$S-  Stackprüfung hier unnötig, da seine Größe bereits bestimmt ist. *)
  5.  
  6. (*
  7.    Hilfsmodul zum Abfangen und Anzeigen von Laufzeitfehlern.
  8.  
  9.    Gegenüber GEMError werden
  10.      - keine Fehlertexte f. Loader-Fehler und allg. Laufzeitfehler
  11.        initialisiert,
  12.      - keine automatisch erkannten Dateifehler angezeigt sondern ignoriert,
  13.      - keine Prozedur- oder Modulnamen bei einem Fehler angezeigt,
  14.      - kein Error-Scan ermöglicht,
  15.      - Bei Bus- und Adreßfehlern nicht die Zugriffsadr. angezeigt.
  16.  
  17.   25.10.88  TT  SysCatchErrors statt CatchErrors
  18.   14.05.90  TT  Dateifehlermeldungen werden initialisiert
  19.   25.07.90  TT  Normale Laufzeitfehlermeldungen werden auch initialisiert
  20. *)
  21.  
  22.  
  23. FROM SYSTEM IMPORT ASSEMBLER, LONGWORD, WORD, ADDRESS, BYTE, ADR;
  24. FROM SystemError IMPORT OutOfMemory;
  25. FROM SysBuffers IMPORT HdlErrorStack;
  26. FROM PrgCtrl IMPORT TermProcess;
  27. FROM ResCtrl IMPORT RemovalCarrier, CatchRemoval;
  28. IMPORT MOSGlobals;
  29. FROM Strings IMPORT Assign, Insert, Concat, Empty, Append;
  30. FROM SysTypes IMPORT ExcDesc;
  31. FROM HdlError IMPORT GetErrorMsg, ReleaseCatcher, SysCatchErrors;
  32. FROM ErrBase IMPORT RtnCond, ErrResp;
  33. FROM MOSConfig IMPORT RuntimeErrMsg, FileErrMsg;
  34.  
  35.  
  36. PROCEDURE FormAlert (but: CARDINAL; msg: ADDRESS): CARDINAL;
  37.   (*$L-*)
  38.   BEGIN
  39.     ASSEMBLER
  40.         MOVE.L  -(A3),A0        ; msg
  41.         LEA     Data(PC),A1
  42.         LEA     24(A1),A2
  43.         MOVE.L  A0,(A2)
  44.         MOVE.L  A2,16(A1)
  45.         ADDQ    #4,A2
  46.         MOVE.L  A2,8(A1)
  47.         MOVE    -(A3),(A2)+     ; Default Button-Nr.
  48.         MOVE.L  A2,12(A1)
  49.         MOVE.L  A2,-(A7)
  50.         ADDQ    #2,A2
  51.         MOVE.L  A2,4(A1)
  52.         LEA     Control(PC),A0
  53.         MOVE.L  A0,(A1)
  54.         CLR.L   10(A2)
  55.         MOVE.L  A1,D1
  56.         MOVE    #$C8,D0
  57.         TRAP    #2
  58.         MOVE.L  (A7)+,A0
  59.         MOVE    (A0),(A3)+
  60.         RTS
  61.  
  62. Control DC.W    52,1,1,1,0,0
  63. Data    DS      52
  64.     END
  65.   END FormAlert;
  66.   (*$L=*)
  67.  
  68.  
  69. (* Folgende Funktion fängt allgemeine Laufzeitfehler ab. *)
  70.  
  71. PROCEDURE bye (nr: INTEGER; msg: ARRAY OF CHAR; causer: ErrResp;
  72.                cont: RtnCond; VAR info: ExcDesc): BOOLEAN;
  73.  
  74.   VAR strVal: BOOLEAN;
  75.       str: ARRAY [0..81] OF CHAR;
  76.  
  77.   BEGIN
  78.     IF Empty (msg) THEN
  79.       GetErrorMsg (nr, str)
  80.     ELSE
  81.       Assign (msg,str,strVal)
  82.     END;
  83.     Insert ('[3][', 0, str, strVal);
  84.     Append ('][Quit',str,strVal);
  85.     IF cont = mayContinue THEN
  86.       Append ('|Cont',str,strVal)
  87.     END;
  88.     Append (']',str,strVal);
  89.     IF FormAlert (1, ADR (str)) = 1 THEN (* Quit *)
  90.       TermProcess (nr)
  91.     ELSE (* Cont *)
  92.       RETURN FALSE
  93.     END
  94.   END bye;
  95.   (*$S=*)
  96.  
  97. (* Folgende Prozedur dient als Datenfeld mit allen Laufzeitfehlertexten. *)
  98.  
  99. PROCEDURE errMessages;
  100.   (*$L- : keinen Eingangscode erzeugen. *)
  101.   BEGIN
  102.     ASSEMBLER
  103.         DC.W  -32768  ; default für undefinierte Fehlernummern:
  104.                         ACZ 'Undefinierter Fehler: @'  ASC '        '
  105.  
  106.         DC.W    MOSGlobals.NoErr
  107.                         ACZ 'Kein Fehler'  ASC '                    '
  108.         DC.W    MOSGlobals.GeneralErr
  109.                         ACZ 'Genereller Fehler'  ASC '              '
  110.         DC.W    MOSGlobals.BusFault
  111.                         ACZ 'Adresse nicht ansprechbar'  ASC '      '
  112.         DC.W    MOSGlobals.OddBusAddr
  113.                         ACZ 'Zugriff auf ungerade Adresse'  ASC '   '
  114.         DC.W    MOSGlobals.IllegalInstr
  115.                         ACZ 'Unbekannte Maschinenanweisung'  ASC '  '
  116.         DC.W    MOSGlobals.DivByZero
  117.                         ACZ 'Division durch Null'  ASC '            '
  118.         DC.W    MOSGlobals.OutOfRange
  119.                         ACZ 'Bereichsüberschreitung'  ASC '         '
  120.         DC.W    MOSGlobals.Overflow
  121.                         ACZ 'Überlauf'  ASC '                       '
  122.         DC.W    MOSGlobals.StringOverflow
  123.                         ACZ 'String-Überlauf'  ASC '                '
  124.         DC.W    MOSGlobals.NoValidRETURN
  125.                         ACZ 'Fehlende RETURN-Anweisung'  ASC '      '
  126.         DC.W    MOSGlobals.OutOfStack
  127.                         ACZ 'Stacküberlauf'  ASC '                  '
  128.         DC.W    MOSGlobals.HALTInstr
  129.                         ACZ 'HALT - Anweisung'  ASC '               '
  130.         DC.W    MOSGlobals.FileSystemErr
  131.                         ACZ 'Fehler im Dateisystem'  ASC '          '
  132.         DC.W    MOSGlobals.OutOfMemory
  133.                         ACZ 'Ungenügend freier Speicher'  ASC '     '
  134.         DC.W    MOSGlobals.IllegalCall
  135.                         ACZ 'Unerlaubter Funktionsaufruf'  ASC '    '
  136.         DC.W    MOSGlobals.CoroutineRtn
  137.                         ACZ 'Rückkehr aus Coroutine'  ASC '         '
  138.         DC.W    MOSGlobals.InternalFault
  139.                         ACZ 'Interner Fehler'  ASC '                '
  140.         DC.W    MOSGlobals.IllegalProcVar
  141.                         ACZ 'Undefinierte PROCEDURE-Var.'  ASC '    '
  142.         DC.W    MOSGlobals.IllegalPointer
  143.                         ACZ 'Uninitialisierte POINTER-Var.'  ASC '  '
  144.         DC.W    MOSGlobals.UserBreak
  145.                         ACZ 'Abbruch durch den Anwender'  ASC '     '
  146.         DC.W    MOSGlobals.IllegalState
  147.                         ACZ 'Interner Statusfehler'  ASC '          '
  148.         DC.W    MOSGlobals.Exception
  149.                         ACZ 'Diverse Exception'  ASC '              '
  150.         DC.W    MOSGlobals.GenFPErr
  151.                         ACZ 'Div. Floating-Point Fehler'  ASC '     '
  152.         DC.W    MOSGlobals.CaseSelectErr
  153.                         ACZ 'Unerfüllte CASE-Anweisung'  ASC '      '
  154.         DC.W    MOSGlobals.ConfigErr
  155.                         ACZ 'Fataler Konfigurationsfehler'  ASC '   '
  156.         DC.W    MOSGlobals.IllegalClosure
  157.                         ACZ 'Zuweisung lokaler Prozedur'  ASC '     '
  158.         DC.W    MOSGlobals.GemErr
  159.                         ACZ 'Fehler bei letztem GEM-Aufruf'  ASC '  '
  160.  
  161. (*  English (?) error messages:
  162.         DC.W  -32768  ; default für undefinierte Fehlernummern:
  163.                         ACZ 'Undefined error: @'  ASC '             '
  164.         DC.W  MOSGlobals.NoErr
  165.                         ACZ 'No error'  ASC '                       '
  166.         DC.W  MOSGlobals.GeneralErr
  167.                         ACZ 'General error'  ASC '                  '
  168.         DC.W  MOSGlobals.BusFault
  169.                         ACZ 'Bus error'  ASC '                      '
  170.         DC.W  MOSGlobals.OddBusAddr
  171.                         ACZ 'Address error'  ASC '                  '
  172.         DC.W  MOSGlobals.IllegalInstr
  173.                         ACZ 'Illegal instruction'  ASC '            '
  174.         DC.W  MOSGlobals.DivByZero
  175.                         ACZ 'Division by zero'  ASC '               '
  176.         DC.W  MOSGlobals.OutOfRange
  177.                         ACZ 'Out of range'  ASC '                   '
  178.         DC.W  MOSGlobals.Overflow
  179.                         ACZ 'Overflow'  ASC '                       '
  180.         DC.W  MOSGlobals.StringOverflow
  181.                         ACZ 'String overflow'  ASC '                '
  182.         DC.W  MOSGlobals.NoValidRETURN
  183.                         ACZ 'No valid RETURN from function'  ASC '  '
  184.         DC.W  MOSGlobals.OutOfStack
  185.                         ACZ 'Out of stack space'  ASC '             '
  186.         DC.W  MOSGlobals.HALTInstr
  187.                         ACZ 'HALT encountered'  ASC '               '
  188.         DC.W  MOSGlobals.FileSystemErr
  189.                         ACZ 'Error in file system'  ASC '           '
  190.         DC.W  MOSGlobals.OutOfMemory
  191.                         ACZ 'Out of memory'  ASC '                  '
  192.         DC.W  MOSGlobals.IllegalCall
  193.                         ACZ 'Illegal function call'  ASC '          '
  194.         DC.W  MOSGlobals.CoroutineRtn
  195.                         ACZ 'Return from coroutine'  ASC '          '
  196.         DC.W  MOSGlobals.InternalFault
  197.                         ACZ 'Internal error'  ASC '                 '
  198.         DC.W  MOSGlobals.IllegalProcVar
  199.                         ACZ 'Undefined PROCEDURE variable'  ASC '   '
  200.         DC.W  MOSGlobals.IllegalPointer
  201.                         ACZ 'Undefined pointer variable'  ASC '     '
  202.         DC.W  MOSGlobals.UserBreak
  203.                         ACZ 'Interrupt by user'  ASC '              '
  204.         DC.W  MOSGlobals.IllegalState
  205.                         ACZ 'Internal state fault'  ASC '           '
  206.         DC.W  MOSGlobals.Exception
  207.                         ACZ 'Unspecified exception'  ASC '          '
  208.         DC.W  MOSGlobals.GenFPErr
  209.                         ACZ 'General Floating-Point error'  ASC '   '
  210.         DC.W  MOSGlobals.CaseSelectErr
  211.                         ACZ 'CASE selection error'  ASC '           '
  212.         DC.W  MOSGlobals.ConfigErr
  213.                         ACZ 'Fatal configuration error'  ASC '      '
  214.         DC.W  MOSGlobals.IllegalClosure
  215.                         ACZ 'Assignment of local procedure'  ASC '  '
  216.         DC.W    MOSGlobals.GemErr
  217.                         ACZ 'Error at last GEM-call'  ASC '         '
  218. *)
  219.  
  220.         DC.W  0,0       ; Endekennzeichnung für die Liste
  221.     END
  222.   END errMessages;
  223.   (*$L=*)
  224.  
  225. (* Folgende Prozedur dient als Datenfeld mit allen Dateifehlertexten. *)
  226.  
  227. PROCEDURE fileMessages;
  228.   (*$L- : keinen Eingangscode erzeugen. *)
  229.   BEGIN
  230.     ASSEMBLER
  231. (* deutsche Meldungen: *)
  232.         DC.W    32767  ; default für undefinierte positive Fehlernummern:
  233.                         ACZ 'Undefinierte Warnung: @'  ASC '        '
  234.         DC.W    MOSGlobals.fNotDeleted
  235.                         ACZ 'Datei war nicht vorhanden'  ASC '      '
  236.         DC.W    MOSGlobals.fWasNotOpen
  237.                         ACZ 'Datei war nicht geöffnet'  ASC '       '
  238.         DC.W    MOSGlobals.fEOF
  239.                         ACZ 'Dateiende erreicht'  ASC '             '
  240.         DC.W    MOSGlobals.fEOL
  241.                         ACZ 'Zeilenende erreicht'  ASC '            '
  242.         DC.W    MOSGlobals.fOK
  243.                         ACZ 'Kein Fehler'  ASC '                    '
  244.         DC.W    MOSGlobals.fError
  245.                         ACZ 'Allgemeiner Fehler'  ASC '             '
  246.         DC.W    MOSGlobals.fDriveNotReady
  247.                         ACZ 'Laufwerk nicht ansprechbar'  ASC '     '
  248.         DC.W    MOSGlobals.fUnknownCmd
  249.                         ACZ 'Unbekannte Funktion'  ASC '            '
  250.         DC.W    MOSGlobals.fCRCError
  251.                         ACZ 'Prüfsummenfehler'  ASC '               '
  252.         DC.W    MOSGlobals.fBadRequest
  253.                         ACZ 'Unerlaubte Funktion'  ASC '            '
  254.         DC.W    MOSGlobals.fSeekError
  255.                         ACZ 'Disk defekt'  ASC '                    '
  256.         DC.W    MOSGlobals.fUnknownMedia
  257.                         ACZ 'Unbekanntes Disk-Format'  ASC '        '
  258.         DC.W    MOSGlobals.fSectorNotFound
  259.                         ACZ 'Sektor nicht vorhanden'  ASC '         '
  260.         DC.W    MOSGlobals.fNoPaper
  261.                         ACZ 'Drucker: Papierende'  ASC '            '
  262.         DC.W    MOSGlobals.fWriteFault
  263.                         ACZ 'Schreibfehler'  ASC '                  '
  264.         DC.W    MOSGlobals.fReadFault
  265.                         ACZ 'Lesefehler'  ASC '                     '
  266.         DC.W    MOSGlobals.fGenError
  267.                         ACZ 'Allgemeiner Disk-Fehler'  ASC '        '
  268.         DC.W    MOSGlobals.fWriteProtected
  269.                         ACZ 'Disk ist schreibgeschützt'  ASC '      '
  270.         DC.W    MOSGlobals.fMediaChanged
  271.                         ACZ 'Disk wurde gewechselt'  ASC '          '
  272.         DC.W    MOSGlobals.fUnknownDevice
  273.                         ACZ 'Unbekanntes Gerät o. Laufwerk'  ASC '  '
  274.         DC.W    MOSGlobals.fBadSectorsOnFormat
  275.                         ACZ 'Fehlerhafte Sektoren'  ASC '           '
  276.         DC.W    MOSGlobals.fInsertOtherDisk
  277.                         ACZ 'Disk wechseln (A<->B)'  ASC '          '
  278.         DC.W    MOSGlobals.fInvalidFunctionNr
  279.                         ACZ 'Unerlaubte Funktionsnummer'  ASC '     '
  280.         DC.W    MOSGlobals.fFileNotFound
  281.                         ACZ 'Datei existiert nicht'  ASC '          '
  282.         DC.W    MOSGlobals.fPathNotFound
  283.                         ACZ 'Directory existiert nicht'  ASC '      '
  284.         DC.W    MOSGlobals.fTooManyOpen
  285.                         ACZ 'Zu viele Dateien offen'  ASC '         '
  286.         DC.W    MOSGlobals.fAccessDenied
  287.                         ACZ 'Zugriff verwehrt'  ASC '               '
  288.         DC.W    MOSGlobals.fInvalidHandle
  289.                         ACZ 'Unerlaubte Zugriffskennung'  ASC '     '
  290.         DC.W    MOSGlobals.fInsufficientMemory
  291.                         ACZ 'Zu wenig Speicher'  ASC '              '
  292.         DC.W    MOSGlobals.fInvalidMemBlkAddr
  293.                         ACZ 'Speicherblock existiert nicht'  ASC '  '
  294.         DC.W    MOSGlobals.fInvalidDrive
  295.                         ACZ 'Unerlaubtes Laufwerk'  ASC '           '
  296.         DC.W    MOSGlobals.fDiffDrives
  297.                         ACZ 'Rename: verschiedene Laufwerke'  ASC ' '
  298.         DC.W    MOSGlobals.fNoMoreFiles
  299.                         ACZ 'Keine weiteren Dateien'  ASC '         '
  300.         DC.W    MOSGlobals.fRangeError
  301.                         ACZ 'Bereichsüberschreitung'  ASC '         '
  302.         DC.W    MOSGlobals.fInternalError
  303.                         ACZ 'Interner Fehler'  ASC '                '
  304.         DC.W    MOSGlobals.fBadFormatOfPrg
  305.                         ACZ 'Programmdatei defekt'  ASC '           '
  306.         DC.W    MOSGlobals.fResizeFailure
  307.                         ACZ 'Speicherblock nicht vergrößbar'  ASC ' '
  308.         DC.W    MOSGlobals.fOutOfMem
  309.                         ACZ 'Zu wenig Speicher'  ASC '              '
  310.         DC.W    MOSGlobals.fFileExists
  311.                         ACZ 'Datei existiert schon'  ASC '          '
  312.         DC.W    MOSGlobals.fNoReadAllowed
  313.                         ACZ 'Lesezugriff nicht erlaubt'  ASC '      '
  314.         DC.W    MOSGlobals.fFileNotClosed
  315.                         ACZ 'Datei noch offen'  ASC '               '
  316.         DC.W    MOSGlobals.fFileNotOpen
  317.                         ACZ 'Datei nicht offen'  ASC '              '
  318.         DC.W    MOSGlobals.fInternalErr1
  319.                         ACZ 'Interner Fehler (Pos>Length)'  ASC '   '
  320.         DC.W    MOSGlobals.fInternalErr2
  321.                         ACZ 'Interner Fehler (2)'  ASC '            '
  322.         DC.W    MOSGlobals.fBadOp
  323.                         ACZ 'Zugriff in falschem Modus'  ASC '      '
  324.         DC.W    MOSGlobals.fBadAccess
  325.                         ACZ 'Zugriff nicht erlaubt'  ASC '          '
  326.         DC.W    MOSGlobals.fEndOfFile
  327.                         ACZ 'Dateiende überschritten'  ASC '        '
  328.         DC.W    MOSGlobals.fDoubleUndo
  329.                         ACZ "Wiederholter 'UndoRead'-Aufruf"  ASC ' '
  330.         DC.W    MOSGlobals.fNameTooLarge
  331.                         ACZ 'Dateiname zu lang'  ASC '              '
  332.         DC.W    MOSGlobals.fDiskFull
  333.                         ACZ 'Disk ist voll'  ASC '                  '
  334.         DC.W    MOSGlobals.fIllegalCall
  335.                         ACZ 'Unerlaubter Funktionsaufruf'  ASC '    '
  336.         DC.W    -32768 ; default für undefinierte negative Fehlernummern:
  337.                         ACZ 'Undefinierter Fehler: @'  ASC '        '
  338.  
  339. (* english messages:
  340.         DC.W    32767  ; default für undefinierte positive Fehlernummern:
  341.                         ACZ 'Undefined warning: @'  ASC '           '
  342.         DC.W    MOSGlobals.fNotDeleted
  343.                         ACZ 'File did not exist'  ASC '             '
  344.         DC.W    MOSGlobals.fWasNotOpen
  345.                         ACZ 'File wasn't open'  ASC '               '
  346.         DC.W    MOSGlobals.fEOF
  347.                         ACZ 'End of file'  ASC '                    '
  348.         DC.W    MOSGlobals.fEOL
  349.                         ACZ 'End of line'  ASC '                    '
  350.         DC.W    MOSGlobals.fOK
  351.                         ACZ 'No error'  ASC '                       '
  352.         DC.W    MOSGlobals.fError
  353.                         ACZ 'General error'  ASC '                  '
  354.         DC.W    MOSGlobals.fDriveNotReady
  355.                         ACZ 'Drive not ready'  ASC '                '
  356.         DC.W    MOSGlobals.fUnknownCmd
  357.                         ACZ 'Unknown command'  ASC '                '
  358.         DC.W    MOSGlobals.fCRCError
  359.                         ACZ 'CRC error'  ASC '                      '
  360.         DC.W    MOSGlobals.fBadRequest
  361.                         ACZ 'Bad request'  ASC '                    '
  362.         DC.W    MOSGlobals.fSeekError
  363.                         ACZ 'Seek error'  ASC '                     '
  364.         DC.W    MOSGlobals.fUnknownMedia
  365.                         ACZ 'Unknown media'  ASC '                  '
  366.         DC.W    MOSGlobals.fSectorNotFound
  367.                         ACZ 'Sector not found'  ASC '               '
  368.         DC.W    MOSGlobals.fNoPaper
  369.                         ACZ 'Out of paper'  ASC '                   '
  370.         DC.W    MOSGlobals.fWriteFault
  371.                         ACZ 'Write fault'  ASC '                    '
  372.         DC.W    MOSGlobals.fReadFault
  373.                         ACZ 'Read fault'  ASC '                     '
  374.         DC.W    MOSGlobals.fGenError
  375.                         ACZ 'General disk error'  ASC '             '
  376.         DC.W    MOSGlobals.fWriteProtected
  377.                         ACZ 'Disk is write-protected'  ASC '        '
  378.         DC.W    MOSGlobals.fMediaChanged
  379.                         ACZ 'Media change detected'  ASC '          '
  380.         DC.W    MOSGlobals.fUnknownDevice
  381.                         ACZ 'Unknown device'  ASC '                 '
  382.         DC.W    MOSGlobals.fBadSectorsOnFormat
  383.                         ACZ 'Bad sectors on format'  ASC '          '
  384.         DC.W    MOSGlobals.fInsertOtherDisk
  385.                         ACZ 'Insert other disk'  ASC '              '
  386.         DC.W    MOSGlobals.fInvalidFunctionNr
  387.                         ACZ 'Invalid function number'  ASC '        '
  388.         DC.W    MOSGlobals.fFileNotFound
  389.                         ACZ 'File not found'  ASC '                 '
  390.         DC.W    MOSGlobals.fPathNotFound
  391.                         ACZ 'Path not found'  ASC '                 '
  392.         DC.W    MOSGlobals.fTooManyOpen
  393.                         ACZ 'Handle pool exhausted'  ASC '          '
  394.         DC.W    MOSGlobals.fAccessDenied
  395.                         ACZ 'Access denied'  ASC '                  '
  396.         DC.W    MOSGlobals.fInvalidHandle
  397.                         ACZ 'Invalid handle'  ASC '                 '
  398.         DC.W    MOSGlobals.fInsufficientMemory
  399.                         ACZ 'Insufficient memory'  ASC '            '
  400.         DC.W    MOSGlobals.fInvalidMemBlkAddr
  401.                         ACZ 'Invalid memory block address'  ASC '   '
  402.         DC.W    MOSGlobals.fInvalidDrive
  403.                         ACZ 'Invalid drive specification'  ASC '    '
  404.         DC.W    MOSGlobals.fDiffDrives
  405.                         ACZ 'Rename: different drives spec.'  ASC ' '
  406.         DC.W    MOSGlobals.fNoMoreFiles
  407.                         ACZ 'No more files'  ASC '                  '
  408.         DC.W    MOSGlobals.fRangeError
  409.                         ACZ 'Range error'  ASC '                    '
  410.         DC.W    MOSGlobals.fInternalError
  411.                         ACZ 'GEMDOS internal error'  ASC '          '
  412.         DC.W    MOSGlobals.fBadFormatOfPrg
  413.                         ACZ 'Invalid executable file format'  ASC ' '
  414.         DC.W    MOSGlobals.fResizeFailure
  415.                         ACZ 'Memory block growth failure'  ASC '    '
  416.         DC.W    MOSGlobals.fOutOfMem
  417.                         ACZ 'Insufficient memory'  ASC '            '
  418.         DC.W    MOSGlobals.fFileExists
  419.                         ACZ 'File exists'  ASC '                    '
  420.         DC.W    MOSGlobals.fNoReadAllowed
  421.                         ACZ 'Read access not allowed'  ASC '        '
  422.         DC.W    MOSGlobals.fFileNotClosed
  423.                         ACZ 'File not closed'  ASC '                '
  424.         DC.W    MOSGlobals.fFileNotOpen
  425.                         ACZ 'File not opened'  ASC '                '
  426.         DC.W    MOSGlobals.fInternalErr1
  427.                         ACZ 'Internal error (Pos>Length)'  ASC '    '
  428.         DC.W    MOSGlobals.fInternalErr2
  429.                         ACZ 'Internal error (2)'  ASC '             '
  430.         DC.W    MOSGlobals.fBadOp
  431.                         ACZ 'Bad access mode'  ASC '                '
  432.         DC.W    MOSGlobals.fBadAccess
  433.                         ACZ 'Read or write not allowed here'  ASC ' '
  434.         DC.W    MOSGlobals.fEndOfFile
  435.                         ACZ 'End of file reached'  ASC '            '
  436.         DC.W    MOSGlobals.fDoubleUndo
  437.                         ACZ "Repeated 'UndoRead' call"  ASC '       '
  438.         DC.W    MOSGlobals.fNameTooLarge
  439.                         ACZ 'File name too long'  ASC '             '
  440.         DC.W    MOSGlobals.fDiskFull
  441.                         ACZ 'Disk full'  ASC '                      '
  442.         DC.W    MOSGlobals.fIllegalCall
  443.                         ACZ 'Illegal function call'  ASC '          '
  444.         DC.W    -32768 ; default für undefinierte negative Fehlernummern:
  445.                         ACZ 'Undefined error: @'  ASC '             '
  446. *)
  447.         DC.W  0,0       ; Endekennzeichnung für die Liste
  448.     END
  449.   END fileMessages;
  450.   (*$L=*)
  451.  
  452. PROCEDURE freeSys;
  453.   BEGIN
  454.     ReleaseCatcher (bye)
  455.   END freeSys;
  456.  
  457. VAR stck: MOSGlobals.MemArea;
  458.     rHdl: RemovalCarrier;
  459.  
  460. BEGIN
  461.   CatchRemoval (rHdl, freeSys, stck);
  462.   (* Abfangen aller Fehlermeldungen: *)
  463.   stck.bottom := ADR (HdlErrorStack);
  464.   stck.length := SIZE (HdlErrorStack);
  465.   IF ~SysCatchErrors (bye, stck) THEN OutOfMemory END;
  466.   FileErrMsg:= ADDRESS (fileMessages);
  467.   RuntimeErrMsg:= ADDRESS (errMessages);
  468. END SimpleError.
  469.